//
//  main.m
//  OC09_代理设计模式
//
//  Created by dllo on 15/12/11.
//  Copyright © 2015年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Mother.h"
#import "Teacher.h"
#import "Student.h"
#import "Doctor.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
      
#pragma mark - 知识点1 代理设计模式
        
        /** 场景: 
         * 委托人: mother对象
         * 受委托人, 教师对象, 学生对象, 护士对象.
         * 协议: 1.洗衣服, 2.做饭, 3.生小孩
         *
         * 母亲对象最终要指定一个delegate(代理)
         * 当母亲对象, 执行付款方法时, 代理人开始执行协议中的方法.
         */
        
        Mother *mother = [[Mother alloc] initWithName:@"Marry"];
        
        Teacher *teacher = [[Teacher alloc] initWithName:@"Mr.cheng"];
        
        Student *student = [[Student alloc] initWithName:@"heiliu"];
        
        Doctor *doctor = [[Doctor alloc] initWithName:@"Zhangsan"];
        
        /** 第一步: 母亲声明协议, 详见mother.h文件 */
        
        /** 第二步: 母亲声明一个delegate属性, 目的是以后指定代理人(赋值), 详见mather.h文件 */
        
        /** 第三步: 教师, 学生, 医生 签订协议. */
        
        /** 第四步: 母亲指定一个代理人 */
        
        mother.delegate = student;
        
        /** 第五步: 代理人实现方法. 详见student.m文件 */
        
        /** 第六步: 在适当的时间代理人调用协议方法(即生小孩, 做饭, 洗衣服......).
         *
         * 我们选中的时机是, 母亲付钱(方法), 代理人开始执行协议方法. 
         * 详见mother类文件 payMoney方法.
         */
        
        [mother payMoney];
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    }
    return 0;
}
